import config from "@/config"
import {
	getToken
} from "./auth"

/**
 * 显示消息提示框
 * @param content 提示的标题
 */
export function toast(content) {
	uni.showToast({
		icon: 'none',
		title: content,
		position: 'bottom'
	})
}

/**
 * 显示模态弹窗
 * @param content 提示的标题
 */
export function showConfirm(content) {
	return new Promise((resolve, reject) => {
		uni.showModal({
			title: '提示',
			content: content,
			cancelText: '取消',
			confirmText: '确定',
			success: function(res) {
				resolve(res)
			}
		})
	})
}
/**
 * 手机号隐藏中键四位
 * @param {Object} params
 */
export function starPhone(phone) {
	if (!phone) {
		return
	}
	return phone.replace(/^(\d{3})\d{4}(\d{4})$/, '$1****$2')
}

/**
 * 参数处理
 * @param params 参数
 */
export function tansParams(params) {
	let result = ''
	for (const propName of Object.keys(params)) {
		const value = params[propName]
		var part = encodeURIComponent(propName) + "="
		if (value !== null && value !== "" && typeof(value) !== "undefined") {
			if (typeof value === 'object') {
				for (const key of Object.keys(value)) {
					if (value[key] !== null && value[key] !== "" && typeof(value[key]) !== 'undefined') {
						let params = propName + '[' + key + ']'
						var subPart = encodeURIComponent(params) + "="
						result += subPart + encodeURIComponent(value[key]) + "&"
					}
				}
			} else {
				result += part + encodeURIComponent(value) + "&"
			}
		}
	}
	return result
}

// 解析小程序扫码的参数
export function parseSceneParams(scene) { // 定义一个函数，接收一个scene参数，返回一个包含参数的对象 {userId: '123', name: 'John'}
	const params = decodeURIComponent(scene).match(
		/(\w+)=(\w+)/g); // 匹配参数，以=分割，获取参数名和参数值数组 [['userId=123'], ['name=John']]
	const paramsObj = params.reduce((acc, cur) => { // 遍历参数数组，将参数名和参数值组成对象 {userId: '123', name: 'John'}
		const [key, value] = cur.split('='); // 使用=分割参数名和参数值 ['userId', '123'] ['name', 'John']
		return {
			...acc,
			[key]: value
		}; // 返回合并后的对象 {userId: '123', name: 'John'}
	}, {}); // 初始化空对象，用于合并参数对象 {userId: '123', name: 'John'}
	return paramsObj; // 返回包含参数的对象 {userId: '123', name: 'John'}
}


// 获取二维码路径参数
export function getWxMiniProgramUrlParam(url) {
	let theRequest = {};
	if (url.indexOf("#") != -1) {
		const str = url.split("#")[1];
		const strs = str.split("&");
		for (let i = 0; i < strs.length; i++) {
			theRequest[strs[i].split("=")[0]] = decodeURI(strs[i].split("=")[1]);
		}
	} else if (url.indexOf("?") != -1) {
		const str = url.split("?")[1];
		const strs = str.split("&");
		for (let i = 0; i < strs.length; i++) {
			theRequest[strs[i].split("=")[0]] = decodeURI(strs[i].split("=")[1]);
		}
	}
	return theRequest;
}


/**
 * 判断是否存在上一个
 */
export function hasPreviousPage() {
	const pages = getCurrentPages();
	return pages.length > 1;
}

export function navbarPage() {
	if (hasPreviousPage()) {
		uni.navigateBack()
		return
	}
	uni.switchTab({
		url: '/pages/index'
	})

}


export function uploadFilePromise(url) {
	return new Promise((resolve, reject) => {
		uni.uploadFile({
			url: config.baseUrl + '/api/upload/minioFile', // 仅为示例，非真实的接口地址
			filePath: url,
			name: 'file',
			header: {
				// 'Content-Type': "multipart/form-data;boundary=" + new Date().getTime()
				'Authorization': getToken(),
			},
			success: (resp) => {
				resolve(resp.data);
			},
		})

	})
}



export function downloadFileData({
	fileName,
	format
}, url) {

	console.info('文件名', fileName)
	console.info('文件格式', format)
	console.info('url', url)

	return new Promise((resolve, reject) => {
		uni.downloadFile({
			url: url,
			// uni.env.USER_DATA_PATH表示的是临时路径
			filePath: `${uni.env.USER_DATA_PATH}/${fileName}`,
			success(res) {
				resolve(res.filePath);
			},
			fail(error) {
				reject(error)
			}
		})
	})
}

export function callPhone(phone) {
	uni.makePhoneCall({
		phoneNumber: phone // 电话号码
	});
}

// 保存通讯录信息到手机通讯录中。
export function savePhoneContact({
	name,
	phone,
	email,
	organization
}) {
	uni.addPhoneContact({
		firstName: name, // 姓名，不传则默认使用firstName字段作为姓名
		mobilePhoneNumber: phone, // 手机号，必填，不支持区号
		email: email, // 邮箱，不传则默认使用email字段作为邮箱
		weChatNumber: phone,
		organization: organization,
		// ...其他字段，如lastName、weChatNumber等，根据需要填写
		success: function(res) {
			// 保存成功后的回调函数，可以在这里进行一些操作，如提示用户保存成功等。
		},
		fail: function(err) {
			// 保存失败后的回调函数，可以在这里进行一些操作，如提示用户保存失败等。
			toast('保存失败:' + err.errMsg)
		},

	});
}

// 复制文本
export function copyText(text) {
	uni.setClipboardData({
		data: text, // 需要复制的文本内容
		success: function() {
			// 复制成功后的回调函数，可以在这里进行一些操作，如提示用户复制成功等。
			toast('复制成功')
		},
	});
}

// 打开地图
export function openLocation(address, name, latitude, longitude) {
	if (!address || !latitude || !longitude) {
		toast('地址信息已隐藏')
		return
	}
	uni.openLocation({
		latitude: Number(latitude),
		longitude: Number(longitude),
		name: name,
		address: address,
		fail: function(error) {
			// 打开地图失败，可能是因为用户未授权或网络问题等
			toast('打开地图失败:' + error)
		}
	});
}

/**
 * @param {Object} obj
 * 判断对象是否为空
 */
export function isEmptyObject(obj) {
	return Object.keys(obj).length === 0 && obj.constructor === Object;
}


export function computingScore(yourAnswer, trueAnswer, score) {
	if (yourAnswer == trueAnswer) {
		return score || 0
	}
	return 0
}